package com.cjy.drools.dsl;

import com.cjy.drools.pojo.Person;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

/**
 * Drools领域语言又称为自然语言，它是业务人员通过dslr文件编写的规则文件，通过用文字描述来实现业务规则。DSL是Drools提供的一种可通过非正规的规则语法编写的规则文件，使用DSL领域语言时，需要创建*.dsl和*.dslr两个规则文件，核心是*.dsl文件。DSL句子可以作为条件元素和结果动作的“模板”，在规则中重复使用。
 * DSL的运行与其他规则文件是一样的，它只是一个编译构建的过程，需要特殊的解析器与转换器。
 *
 * @author cjy
 * @create 2020-04-01
 */
public class RulesDSL {
    public static void main(String[] args) {

    }

    @Test
    public void testDSL() {
        KieServices kss = KieServices.Factory.get();
        KieContainer kc = kss.getKieClasspathContainer();
        KieSession ks = kc.newKieSession("isDsl");

        Person person = new Person();
        person.setName("张三");
        person.setAge(20);

        ks.insert(person);

        int i = ks.fireAllRules();
        System.out.println("总得执行了" + i + "规则");
        System.out.println("总得执行了" + person.getClassName() + "规则");
        ks.dispose();
    }

    @Test
    public void testIsDslRegular(){
        KieServices kss = KieServices.Factory.get();
        KieContainer kc = kss.getKieClasspathContainer();
        KieSession ks = kc.newKieSession("regular");

        Person person = new Person();
        person.setName("张三");
        person.setAge(20);

        ks.insert(person);
        int i = ks.fireAllRules();
        System.out.println("总得执行了" + i + "规则");
        System.out.println("总得执行了" + person.getClassName() + "规则");
        ks.dispose();
    }
}
